package cn.tedu.collection;

import java.util.*;

/*本类用于测试Map接口*/
public class TestMap {
    public static void main(String[] args) {
        //1.创建Map对象
        /*Map中的数据要符合映射规则，一定注意要同时指定K和V的数据类型
        * 至于这个K和V要指定成什么类型的数据，取决于你的具体需求*/
        Map<Integer,String> map = new HashMap<>();//注意导包：java.util

        //2.
        map.put(9527,"白晶晶");
        map.put(9528,"春三十娘");
        map.put(9528,"牛夫人");
        map.put(9529,"小甜甜");
        System.out.println(map);//查看
        /*总结1：Map中存放的都是无序的数据
        * 2.Map中的key不可以重复，如果重复，此key对应的value会被覆盖
        * 打印结果{9527=白晶晶, 9528=牛夫人, 9529=小甜甜}，没有春三十娘*/

        //3.测试常用方法
        //map.clear();//清空集合
        System.out.println(map.containsKey(9528));//true，查看是否包含指定的Key
        System.out.println(map.containsValue("菩提老祖"));//false,查看是否包含指定的Value
        System.out.println(map.equals("牛夫人"));//false,
        System.out.println(map.get(9528));//牛夫人,根据Key来获取对应的V
        System.out.println(map.hashCode());//82450290，获取哈希码值
        System.out.println(map.isEmpty());//false,判断集合是否为空
        System.out.println(map.remove(9528));//删除指定的元素
        System.out.println(map.get(9528));//null,说明映射关系已被移出
        System.out.println(map.size());//获取集合中元素的个数
        Collection<String>values =  map.values();//把map集合中的所有V收集起来放到Collection
        System.out.println(values);//[白晶晶, 小甜甜]

        /*对map集合进行遍历/迭代*/
        /*方式一
        * 遍历map中的数据，但是map本身没有迭代器，所以需要转换成set集合
        * Set<Key>:把map集合中所有Key存到set集合中--KeySet()**/
        //1.
        Set<Integer>keySet = map.keySet();
        //2.想遍历集合，先获取迭代器
        Iterator<Integer> it = keySet.iterator();
        //3.循环遍历元素
        while (it.hasNext()){
            Integer key =  it.next();
            String value = map.get(key);
            System.out.println("{"+key+"="+value+"}");
        }
        /*方式二
        * 遍历map数据，把map转成set集合，是把map中的一对K&V作为一个Entry整体放入Set
        * 一对 K  V 是一个Entry*/
        //1.是把map中的一对K&V作为一个Entry,逐一放入Set集合
        Set<Map.Entry<Integer,String>>entrySet =map.entrySet();
        //2.获取set集合的迭代器
        Iterator<Map.Entry<Integer,String>> it2 = entrySet.iterator();
        //3.循环遍历所有元素
        while (it2.hasNext()){
            //4.获取当前集合遍历到的entry对象
            Map.Entry<Integer,String> entry = it2.next();
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println("{"+key+"="+value+"}");
        }

    }
}
